%% 函数说明
%{
- --------------------------------------------------
* 文件名:Contour_Plot_YW
* 函数名:Contour_Plot_YW
* 功 能:用来绘制等高线图
* 变量说明:
--
--
* 注意事项:
可以输入三个变量或者四个变量
- --------------------------------------------------
%}

% ===================main===========================
function [Hf_this] = Contour_YW(varargin)

    %% 先判断输入参数的个数
    if nargin == 4
        X = varargin{1};
        Y = varargin{2};
        Z = varargin{3};
        Paras = varargin{4};
    elseif nargin == 5
        X = varargin{1};
        Y = varargin{2};
        Z = varargin{3};
        Paras = varargin{4};
        region = varargin{5}; % 用来限制显示的颜色范围
    else
        print('input wrong, you should input 4 or 5 vars')
        return;
    end

    %% 此处定义一些默认的值
    % MarkerSize = 6;
    % Interpreter = 'latex'; % 如果不使用中文的话,改成latex效果更好
    FontSize = 14;
    nargin;
    xaxis1_color = [0 0 0];
    yaxis1_color = xaxis1_color; %[0.00,0.45,0.74];
    % yaxis2_color = [1.00, 0.07, 0.65];
    % Linewidth_box = 1.5; % 坐标轴，图例的线框宽度
    % Line_Width = 2; %线条的宽度
    fig_size = [500 300 560 420]; %figure大小
    % fig_size =  [500 300 720 360];%figure大小

    %% 设置图形窗口参数
    Hf_this = figure;
    set(Hf_this, 'Name', Paras{3, 2}); % 窗口名字
    Hf_this.NumberTitle = 'off'; % 是否显示名字前面的Figure 1
    set(Hf_this, 'Color', 'white') % 背景颜色,也可用RGB,如[110]
    set(Hf_this, 'Renderer', 'painters') % 渲染器
    set(Hf_this, 'Position', fig_size) % 含义分别为左和下边缘到窗口，宽度，高度，比例最好为4:3
    set(Hf_this, 'Units', 'points') % 单位，默认是pixels,归一化为'normalized'
    title(Paras{3, 2}); %标题名字

    % ///////////////////////////////////////

    %% 绘图区
    Ha_this = gca; % get the axes object
    [~, h] = contourf(Y, X, Z, 999);
    set(h, 'LineColor', 'none');
    set(gca, 'FontSize', FontSize, 'FontWeight', 'bold');
    % colorbar('YTickLabel',{'0.2','0.4','0.6','0.8','1'});
    colorbar('limits', [0 1], 'Ticks', [0 0.25 0.5 0.75 1])
    colormap(jet(500)); %设置颜色图名称  parula
    H = h.LevelList;

    if exist('region', 'var')
        H(H < region(1)) = 0;
        H(H > region(2)) = 0;
        set(h, 'LevelList', H);
    end

    hold on;

    set(Ha_this, 'lineWidth', 1.5, ...
        'XColor', xaxis1_color, ...
        'YColor', yaxis1_color, 'FontSize', FontSize, 'FontWeight', 'bold');
    set(Ha_this, 'color', 'none');
    set(Ha_this, 'XMinorTick', 'off'); %打开小刻度
    x_label = Paras{1, 2};
    y_label = Paras{2, 2};
    xlabel(x_label, 'FontSize', FontSize, 'FontWeight', 'bold');
    ylabel(y_label, 'FontSize', FontSize, 'FontWeight', 'bold');
    Ha_this.TickDir = 'out'; % 刻度方向 out in both
    % xticks('auto'); %或者用一个向量
    % xticks([.75 1.9]); %或者用一个向量
    % xticklabels([2 3 4]); % 要显示那些数字的标签

    % box off;

    %% 其它设置
    box on; %是否显示边框
    % box off
    % grid on;
    % grid minor;

    disp("Congratulations! Contour Plot Done!");
end
